/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Helpers;

import Hibernate.HibernateUtil;
import Entities.Klassen;
import Entities.Personen;
import Entities.Cursussen;
import java.sql.Date;
import java.util.Calendar;
import java.util.List;
import org.hibernate.*;

/**
 *
 * @author Erhan
 */
public class KlassenHelper {

    Session session = null;

    /**
     *
     */
    public KlassenHelper() {
        this.session = HibernateUtil.getSessionFactory().getCurrentSession();
    }

    //Ophalen alles
    /**
     * 
     * @return
     */
    public List<Klassen> getklassen() {
        List<Klassen> klassenList = null;
        try {
            org.hibernate.Transaction tx = session.beginTransaction();
            Query q = session.createQuery("from Klassen");
            klassenList = (List<Klassen>) q.list();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return klassenList;
    }

    //Ophalen van 1
    /**
     *
     * @param id
     * @return
     */
    public Klassen getKlas(int id) {
        Klassen result = null;
        try {
            org.hibernate.Transaction tx = session.beginTransaction();
            Query q = session.createQuery("from Klassen where id=" + id);
            result = (Klassen) q.list().get(0);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return result;
    }


    // Wegschrijven
    /**
     *
     * @param cursus
     */
    public void persistKlas(Klassen cursus) {
        org.hibernate.Transaction tx = session.beginTransaction();
        tx.begin();
        session.persist(cursus);
        tx.commit();
    }

    // Verwijderen
    /**
     *
     * @param cursus
     */
    public void deleteKlas(Klassen cursus) {
        org.hibernate.Transaction tx = session.beginTransaction();
        tx.begin();
        session.delete(cursus);
        tx.commit();
    }

    // Updaten
    /**
     *
     * @param cursus
     */
    public void updateKlas(Klassen cursus) {
        org.hibernate.Transaction tx = session.beginTransaction();
        tx.begin();
        session.update(cursus);
        tx.commit();
    }

    /**
     *
     * @param persoonId
     * @param cursusId
     * @return
     */
    public boolean aanmeldenKlas(int persoonId, int cursusId) {
        boolean verder = false;
        PersonenHelper pHelper = new PersonenHelper();
        CursusHelper cHelper = new CursusHelper();
        
        Personen persoon = pHelper.getPersoon(persoonId);
        Cursussen cursus = cHelper.getCursus(cursusId);

        Calendar cal = java.util.Calendar.getInstance();
        int maand = cal.get(Calendar.MONTH);
        int dag = cal.get(Calendar.DAY_OF_MONTH);
        int jaar = cal.get(Calendar.YEAR);
        int volgendJaar = jaar + 1;
        String s_datum_van = jaar + "-" + maand + "-" + dag;
        String s_datum_tot = volgendJaar + "-" + maand + "-" + dag;

        Date geldig_van = Date.valueOf(s_datum_van);
        Date geldig_tot = Date.valueOf(s_datum_tot);

        Klassen klas = new Klassen();
        klas.setAanvraagDatum(geldig_van);
        klas.setAccodering(false);
        klas.setCursussen(cursus);
        klas.setPersonen(persoon);
        klas.setGeldigVan(geldig_van);
        klas.setGeldigTot(geldig_tot);

        persistKlas(klas);
        verder = true;

        return verder;
    }

    /**
     *
     * @param persoonsId
     * @param cursusId
     * @return
     */
    public int klasBijCursus(int persoonsId, int cursusId) {
        int klas = -1;
        Klassen result = null;
        try {
            org.hibernate.Transaction tx = session.beginTransaction();
            Query q = session.createQuery("from Klassen where persoons_id= " + persoonsId + " and cursus_id= " + cursusId);
            result = (Klassen) q.list().get(0);
            if (result != null) {
                if (result.isAccodering() == true) {
                    klas = result.getId();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return klas;
    }

    /**
     *
     * @param persoonsId
     * @param cursusId
     * @return
     */
    public boolean checkAanmelding(int persoonsId, int cursusId) {
        boolean aangemeld = false;
        Klassen result = null;
        try {
            org.hibernate.Transaction tx = session.beginTransaction();
            Query q = session.createQuery("from Klassen where persoons_id= " + persoonsId + " and cursus_id= " + cursusId);
            result = (Klassen) q.list().get(0);
            if (result != null) {
                if (result.isAccodering() == true) {
                    aangemeld = true;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return aangemeld;
    }


    /**
     *
     * @param persoonsId
     * @param cursusId
     * @return
     */
    public boolean checkAanmeldingBetaald(int persoonsId, int cursusId) {
        boolean aangemeld = false;
        Klassen result = null;
        try {
            org.hibernate.Transaction tx = session.beginTransaction();
            Query q = session.createQuery("from Klassen where persoons_id= " + persoonsId + " and cursus_id= " + cursusId);
            result = (Klassen) q.list().get(0);
            if (result != null) {
                if (result.isAccodering() == false) {
                    aangemeld = true;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return aangemeld;
    }


}